<!DOCTYPE html>
<html lang="zh-CN">
  <head>
      <meta charset="utf-8">
      <meta http-equiv="X-UA-Compatible" content="IE=edge">
      <meta name="viewport" content="width=device-width, initial-scale=1">
      <title>Pi-Search Results</title>
      <link href="dist/css/bootstrap.min.css" rel="stylesheet">
  </head>
  <body>
      <div class="container">
          <div class="row">
              <div class="col-xs-12 col-sm-12 col-md-12 col-lg-12">
                  <h1>Pi Search</h1>
                  <h4>先将您要查找的数字输入后，点击查找，结果将从π的小数点后前10亿的数字中查找给出。</h4>
                  <h4>例如您输入1415这三个数字，那么查找后的结果将是1，表示1415出现在π的小数点后第1位。</h4>
                  <h4 class='text-danger'>P.S 数字长度越长，所花的时间就越长</h4>
                  <form id="psaction" method="get" action="index.php">
                    <div class="input-group">
                      <?php 
                        if(isset($_GET['q'])&&is_numeric($_GET['q'])){
                            $inputQ=$_GET['q']; 
                        } else{
                          $inputQ=""; 
                        }
                      ?>
                        <input type="number" class="form-control" required="required" name="q" placeholder="请填写要查找的数字" value="<?php echo $inputQ; ?>">
                        <span class="input-group-btn">
                            <button class="btn btn-default btn-search" type="submit"><i class="glyphicon glyphicon-search"></i> 查找</button>
                        </span>
                    </div>
                  </form>
              </div>

              <div class="col-xs-12 col-sm-12 col-md-12 col-lg-12" style="padding-top:15px;">
                <?php 
                  if(isset($_GET['q'])&&is_numeric($_GET['q'])){
                    //打开10忆位圆周率数字的文件
                    $decimals=fopen('10yi.txt','r'); 
                    $q=$_GET['q'];
                    $start=0;
                    if(!empty($_GET['start'])&&is_numeric($_GET['start'])&&$_GET['start']>=0&&$_GET['start']<1000000000)
                      $start=$_GET['start'];//判断start值
                    $position=0;//设置位置
                    $nb_boucle=$start;
                    $pas=floor((1000000000-$start)/100000);//(10忆-start值)/10万，取整数
                    $rest=(1000000000-$start)%100000;//(10忆-start值)%10万，取余数
                    $ts=microtime(true);//开始查找时间
                    while($nb_boucle<1000000000&&$position==0){
                      $content;
                      fseek($decimals,2+$nb_boucle);//打开文件，从第二个字符串开始计算
                      if($nb_boucle==$pas*100000&&$rest>0){
                        $content=fread($decimals,$rest);//读取文件
                      }
                      else{
                        $content=fread($decimals,100000);//读取文件的前10万
                      }
                      $strpos=strpos($content,$q);
                      if($strpos!==false)
                        $position=$strpos+$nb_boucle+1;//获取该数字的出现位置
                      $nb_boucle+=100000;
                    }
                    $dn=number_format(microtime(true)-$ts, 10, '.', '');//结束查找时间,并计算查找用时
                    //if found
                    if($position>0){
                      $arr=explode($q, $content);
                      $le=substr($arr[0],-10)." <b class='text-danger'>".$q."</b> ".substr($arr[1],0,10);
                        echo "<p>在小数点后第<b class='text-danger'>".number_format($position,0,'.',',')."</b>位成功查找到数字：".$le."</p>";
                      if($dn>0){
                        echo "<p class='text-success'>需要时间".$dn."s</p>";
                      }
                      echo "<p><a href='index.php?start=".$position."&q=".$q."'>在Pi中找到 ".$q." 的下一个出现>></a></p>";
                      //echo "<b class='text-warning'>VIP Results:</b>";
                      $fs=$position+strlen($q);
                      if($fs<99){
                        $e=99-strlen($q)-strlen($arr[0]);
                        if(!empty($_GET['start'])&&is_numeric($_GET['start'])&&$_GET['start']>=0){
                          $a="3.141592653...".$arr[0]." <b class='text-danger'>".$q."</b> ".substr($arr[1],0,$e-9);
                        }else{
                          $a="3.".$arr[0]." <b class='text-danger'>".$q."</b> ".substr($arr[1],0,$e);
                        }
                        
                        $s2=strlen(substr($arr[1],0,$e));
                        if($s2<$e){
                          $sa2=$e-$s2-strlen($q);
                          echo $a.$q.substr($arr[2],0,$sa2);
                        }else{
                          echo $a;
                        }
                        
                        //if()
                      }else{
                        $f=(99-9-strlen($q))%2;
                        $e=floor((99-9-strlen($q))/2);
                        $f=$f+$e;
                        $a=substr($arr[0],-$f)." <b class='text-danger'>".$q."</b> ".substr($arr[1],0,$e);
                         //echo "<br/>".strlen(substr($arr[0],-$f).$q.substr($arr[1],0,$e));
                         $s2=strlen(substr($arr[1],0,$e));
                        if($s2<$e){
                          $sa2=$e-$s2-strlen($q);
                          echo "3.141592653...".$a.$q.substr($arr[2],0,$sa2);
                        }else{
                          echo "3.141592653...".$a;
                        } 
                      }
                    }
                    else{
                      echo '<div class="alert alert-danger" role="alert"><b>警告：</b>你输入的数字不出现或者已经超出10忆里面</div>';
                    }
                    unset($content);//删除读取文件的定义
                    fclose($decimals);//关闭文件
                  }
                ?>
            </div>
          </div>
      </div>

      <!-- jQuery (Bootstrap 的所有 JavaScript 插件都依赖 jQuery，所以必须放在前边) -->
      <script src="dist/js/jquery.min.js"></script>
      <!-- 加载 Bootstrap 的所有 JavaScript 插件。你也可以根据需要只加载单个插件。 -->
      <script src="dist/js/bootstrap.min.js"></script>
  </body>
</html>